<?php
class Conf_unidades_usuarios extends MY_Controller {

	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), 'Conf_unidad_usuario');

    	$this->title = 'Configuraciones :: Usuarios por Unidad';
		$this->CARPETA_VISTAS = 'configuraciones/';
		$this->nombre_entidad = 'Unidad/Usuario';
		$this->nombre_entidad_plural = 'Unidades/Usuarios';

		$this->pagina_editar = $this->CARPETA_VISTAS . 'unidad_usuario_edit_view';

		$this->exportarExcelPermitido = FALSE;
		$this->genero_entidad = 'F';
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Devuelve un arreglo que contiene el objeto de la entidad correspondiente, poblado con la información obtenida a 
	 * partir del formulario recibido a través de POST, y los objetos de otro tipo asociados al mismo.	*/
	protected function getObjetoDesdeForm()
	{
		$id_unidadUsuario = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		$obj_unidadUsuario = $this->getObjeto($id_unidadUsuario);
		$datos['objEntidad'] = $obj_unidadUsuario;

		// Obtengo la unidad a la que se le desean asociar los usuarios
		$id_unidad = is_numeric($this->input->post('sel_unidad')) ? $this->input->post('sel_unidad') : NULL;
		$datos['idUnidad'] = $id_unidad;
		$datos['usuarios'] = $this->input->post('sel_usuario');

		$datos['objRelacionados'] = array();
		return $datos;
	}

	public function editar($id_unidad = NULL)
	{
		// La edición se hace por UNIDAD
		$dataView['objEntidad'] = $this->getObjeto();
		$dataView['id_unidad'] = $id_unidad;

		$this->_cargarFormEdicion($dataView);
	}


	/* IMPORTANTE: DEBE existir esta función. 
	 * Carga en el arreglo que luego se pasarán a las vistas, los datos correspondientes a otras entidades que se
	 * necesiten. Por ejemplo, en este método deben cargarse las entidades a las que puede asociarse o relacionarse
	 * la entidad actual. Si no se requiriesen, no se agrega nada. */
	protected function cargarDatosRelacionados($dataView)
	{
		# Al realizar la edición indico por qué unidad quiero hacerlo, de ahí que se traiga este valor en el dataview
		$id_unidad = isset($dataView['id_unidad']) ? $dataView['id_unidad'] : 0;

		// Creo un objeto del modelo, para poder buscar todos los datos en la BD
		$obj_unidad = new Conf_unidad_negocio($id_unidad);

		$opcionesSel = array();
		if($obj_unidad->exists()) {
			$dataView['listado_unidades'] = $obj_unidad;

			$obj_unid_usuario = new Conf_unidad_usuario();
			$obj_unid_usuario->where('conf_unidad_negocio_id', $id_unidad);
			foreach ($obj_unid_usuario->get_iterated() as $relacion) {
				$opcionesSel[] = $relacion->user_usuario_id;
			}
		}
		else $dataView['listado_unidades'] = $obj_unidad->get_iterated();
		$dataView['opcionesSel'] = $opcionesSel;

		$obj_usuario = new User_usuario();
		$dataView['listado_usuarios'] = $obj_usuario->get_iterated();

		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Obtiene el listado de elementos de acuerdo a los filtros que se hayan establecido y enviado a través
	 * del método POST. Devuelve un detalle de los filtros aplicados (o vacío si no hubiera filtros)	*/	
	protected function _aplicarFiltros($dataView = array())
	{
		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$objEntidad = $this->getObjeto();
		$detalle_filtros = '';

		$dataView['objEntidad'] = $objEntidad;
		$dataView['detalle_filtros'] = $detalle_filtros;

		return $dataView;
	}

	public function guardar()
	{
		$datos = $this->getObjetoDesdeForm();
		$idUnidad = $datos['idUnidad'];

		// Antes de asociar los usuarios a la unidad, borro todas las relaciones que hubiera habido antes
		$objEntidad = $this->getObjeto();
		$objEntidad->where('conf_unidad_negocio_id', $idUnidad)->get();
		$error = parent::eliminarTodos($objEntidad);

		if(empty($error)) {
			foreach ($datos['usuarios'] as $id_usuario) {
				$objEntidad = $this->getObjeto();
				$objEntidad->conf_unidad_negocio_id = $idUnidad;
				$objEntidad->user_usuario_id = $id_usuario;

				$dataView = array();
				$dataView['objEntidad'] = $objEntidad;
				$dataView['objRelacionados'] = array();
				
				$dataView = parent::guardarEntidad($dataView);
				if(!empty($dataView['error'])) $error .= $dataView['error'];
			}

			if(!empty($error)) {
				// Falló el intento de guardar
				$dataView['error'] = $error;
				$this->_cargarFormEdicion($dataView, TRUE); 
			}
			else redirect('Conf_unidades_negocio/ver_todos');
		}
		else {
			$dataView['error'] = 'Ocurrió un error al intentar eliminar los usuarios inicialmente relacionados a la unidad.';
			$this->ver_todos($dataView);
		}
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda ELIMINARSE. */
	protected function validarEliminacion($id_elemento)
	{
		// No se permite la eliminación de usuarios
		return FALSE;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda EDITARSE. */
	protected function validarEdicion($id_elemento)
	{
		return TRUE;
	}
}